import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;

import javax.swing.JOptionPane;

public class Persistencia {
	public static void inserirQuestaoDiscursiva(QuestaoDiscursiva q) throws IOException {
		File diretorio, arquivo;
		FileWriter fw;
		BufferedWriter bw;
		String nome;
		int indice;
		
		diretorio = new File("q");

		if(!diretorio.exists()) {
			diretorio.mkdir();
		}
		indice = 0;
		do {	
			indice++;
			nome = "q/q" + indice + ".txt";
			arquivo = new File(nome);
		} while(arquivo.exists());
		
		fw = new FileWriter(arquivo, true);
		bw = new BufferedWriter(fw);

		bw.write(Integer.toString(q.getStatus()));
		bw.newLine();
		bw.write("0");
		bw.newLine();
		bw.write(q.getAutor());
		bw.newLine();
		bw.write(q.getEnunciado());
		bw.newLine();
		bw.write(q.getResposta());
		bw.newLine();
		for(int i = 0; i < q.getComentario().size(); i++) {
			bw.write(q.getComentario(0).getAutor());
			bw.newLine();
			bw.write(q.getComentario(0).getComentario());
			bw.newLine();
		}

		bw.close();
		fw.close();	
	}
	
	public static void inserirQuestaoMultipla(QuestaoMultEsc q) throws IOException {
		File diretorio, arquivo;
		FileWriter fw;
		BufferedWriter bw;
		String nome;
		int indice;
		
		diretorio = new File("q");

		if(!diretorio.exists()) {
			diretorio.mkdir();
		}
		indice = 0;
		do {	
			indice++;
			nome = "q/q" + indice + ".txt";
			arquivo = new File(nome);
		} while(arquivo.exists());
		
		fw = new FileWriter(arquivo, true);

		bw = new BufferedWriter(fw);

		bw.write(Integer.toString(q.getStatus()));
		bw.newLine();
		bw.write("1");
		bw.newLine();
		bw.write(q.getAutor());
		bw.newLine();
		bw.write(q.getEnunciado());
		bw.newLine();
		
		for(int i = 0; i < 5; i++) {
			bw.write(q.getAlternativas().get(i));
			bw.newLine();
		}
		bw.write(Integer.toString(q.getRespostaCorreta()));
		bw.newLine();

		for(int i = 0; i < q.getComentario().size(); i++) {
			bw.write(q.getComentario(0).getAutor());
			bw.newLine();
			bw.write(q.getComentario(0).getComentario());
			bw.newLine();
		}
		
		bw.close();
		fw.close();
	}
	
	public static void inserirQuestaoVF(QuestaoVF q) throws IOException {
		File diretorio, arquivo;
		FileWriter fw;
		BufferedWriter bw;
		String nome;
		int indice;
		
		diretorio = new File("q");

		if(!diretorio.exists()) {
			diretorio.mkdir();
		}
		indice = 0;
		do {	
			indice++;
			nome = "q/q" + indice + ".txt";
			arquivo = new File(nome);
		} while(arquivo.exists());
		
		fw = new FileWriter(arquivo, true);

		bw = new BufferedWriter(fw);

		bw.write(Integer.toString(q.getStatus()));
		bw.newLine();
		bw.write("2");
		bw.newLine();
		bw.write(q.getAutor());
		bw.newLine();
		bw.write(q.getEnunciado());
		bw.newLine();
		if(q.getResposta())
				bw.write("1");
		else
			bw.write("0");
		bw.newLine();

		for(int i = 0; i < q.getComentario().size(); i++) {
			bw.write(q.getComentario(0).getAutor());
			bw.newLine();
			bw.write(q.getComentario(0).getComentario());
			bw.newLine();
		}
		
		bw.close();
		fw.close();
	}
	
	public static void alterarStatus(String nomeArq, int status) throws IOException {
		File arquivo;
		FileWriter fw;
		
		arquivo = new File(nomeArq);
		fw = new FileWriter(arquivo);
		fw.write(Integer.toString(status));
		fw.close();
	}
	
	public static int getNumQuestoes() {
		File diretorio;
		
		diretorio = new File("q");
		if(!diretorio.exists()) {
			diretorio.mkdir();
		}
		return diretorio.list().length;
	}
	
	public static int getTipoQuestao(String nomeArq) throws NumberFormatException, IOException {
		File arquivo;
		FileReader fr;
		BufferedReader br;
		String tipo;
		
		arquivo = new File(nomeArq);
		fr = new FileReader(arquivo);
		br = new BufferedReader(fr);
		br.readLine();
		tipo = br.readLine();
		return Integer.parseInt(tipo);
	}
		
	public static void removerQuestao(String nomeArq) {
		File arquivo;
		arquivo = new File(nomeArq);
		arquivo.delete();
	}
	
	public static void inserirComentario(int pos) {
		// to do
	}
		
	public static Questao buscarQuestao(int pos) throws IOException {
		File diretorio, arquivo;
		FileReader fr;
		BufferedReader br;
		String linha;
		int status;
		LinkedList<Comentarios> lista;
		Comentarios c;
		QuestaoDiscursiva q0;
		QuestaoMultEsc q1;
		QuestaoVF q2;
		diretorio = new File("q");
		
		arquivo = new File("q/" + diretorio.list()[pos]);

		fr = new FileReader(arquivo);
		br = new BufferedReader(fr);
		
		lista = new LinkedList<Comentarios>();
		c = new Comentarios();
		
		status = Integer.parseInt(br.readLine());
		linha = br.readLine();
		JOptionPane.showMessageDialog(null, linha);
		if(linha == "0") {
			q0 = new QuestaoDiscursiva();
			q0.setAutor(br.readLine());
			q0.setEnunciado(br.readLine());
			q0.setResposta(br.readLine());
			while(br.readLine() != null) {
				c.setAutor(br.readLine());
				c.setComentario(br.readLine());
			}
			q0.setComentario(c);
			JOptionPane.showMessageDialog(null, "oi: " + c.getAutor());
			br.close();
			return q0;
		}
		
		if(linha == "1") {
			LinkedList<String> alternativas;
			
			alternativas = new LinkedList<String>();
			q1 = new QuestaoMultEsc();
			q1.setAutor(br.readLine());
			q1.setEnunciado(br.readLine());
			for(int i = 0; i < 5; i++) {
				alternativas.add(br.readLine());
			}
			q1.setAlternativas(alternativas);
			q1.setRespostaCorreta(Integer.parseInt(br.readLine()));
			while(br.readLine() != null) {
				c.setAutor(br.readLine());
				c.setComentario(br.readLine());
			}
			q1.setComentario(c);
			br.close();
			return q1;
		}
		if(linha == "2") { 
			q2 = new QuestaoVF();
			q2.setAutor(br.readLine());
			q2.setEnunciado(br.readLine());
			if(br.readLine() == "1")
				q2.setResposta(true);
			else
				q2.setResposta(false);
			while(br.readLine() != null) {
				c.setAutor(br.readLine());
				c.setComentario(br.readLine());
			}
			q2.setComentario(c);
			return q2;
			
		}
		return null;
	}
	
}
